package cn.demoncat.util.lang.entity.report;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 报表参数 - 查询统计、查询图表
 * 
 * @author 延晓磊
 *
 * @since 2019年12月12日
 */
public class ReportParam {

	/**
	 * 查询类型（必填）
	 * 
	 * counts：1
	 * charts：2
	 */
	private String method;
	
	/**
	 * 查询模式（必填）
	 * <br/>
	 * counts：ReportConstant.CountMode
	 * <br/>
	 * charts：由3位整数组成，2位模式 ModeTime/ModePeriod + 1位维度Dimension
	 */
	private String mode;
	
	/* =============== 通用筛选（优先于condition参数） ============= */

	/**
	 * 报表分类
	 */
	private String type;
	
	/**
	 * 报表分类项
	 */
	private String item;
	
	/* ===================== Count统计/列表筛选  =================== */
	
	/**
	 * 数据起始时间： startTime <= date
	 */
	private String startTime;
	
	/**
	 * 数据结束时间：endTime > date
	 */
	private String endTime;
	
	/* ==================== 分时图表 ModeTime ==================== */
	
	/**
	 * 基准日期-年
	 */
	private Integer year;
	/**
	 * 基准日期-月
	 */
	private Integer month;
	/**
	 * 基准日期-日
	 */
	private Integer day;
	/**
	 * 基准日期-时
	 */
	private Integer hour;
	
	/* =================== 周期图表 ModePeriod ================ */
	
	/**
	 * 周期数：最小为1
	 */
	private Integer num;
	/**
	 * 基准日期：结束周期
	 */
	private LocalDateTime date;
	
	/* =================== 双维度图表：图表legend ================= */
	
	/**
	 * count维度的标题
	 */
	private String countTitle;
	/**
	 * sum维度的标题
	 */
	private String sumTitle;
	
	/* ========== 多维度图表：数据item与图表legend的对应关系 ========== */
	
	/**
	 * 优先1：{item, title}
	 * 
	 * 注意：SpringMVC接收不到Map参数，需要转JSON串传参后解析；通常该参数由后端赋值
	 */
	private Map<String, String> itemMap;
	/**
	 * 优先2：[item]，前端根据item自行渲染legend
	 */
	private List<String> itemList; 
	/**
	 * 优先3：自动获取legend的级别
	 * 
	 * 1 = 自动根据数据获取{item,title}，须保证title和item不变更，如果title为空使用item；
  	 * 0 = 自动根据数据获取[item]，前端根据item自行渲染legend
	 */
	private String itemAuto;
	
	
	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getMode() {
		return mode;
	}

	public void setMode(String mode) {
		this.mode = mode;
	}

	public Integer getYear() {
		return year;
	}

	public void setYear(Integer year) {
		this.year = year;
	}

	public Integer getMonth() {
		return month;
	}

	public void setMonth(Integer month) {
		this.month = month;
	}

	public Integer getDay() {
		return day;
	}

	public void setDay(Integer day) {
		this.day = day;
	}

	public Integer getHour() {
		return hour;
	}

	public void setHour(Integer hour) {
		this.hour = hour;
	}

	public Integer getNum() {
		return num;
	}

	public void setNum(Integer num) {
		this.num = num;
	}

	public LocalDateTime getDate() {
		return date;
	}

	public void setDate(LocalDateTime date) {
		this.date = date;
	}

	public String getCountTitle() {
		return countTitle;
	}

	public void setCountTitle(String countTitle) {
		this.countTitle = countTitle;
	}

	public String getSumTitle() {
		return sumTitle;
	}

	public void setSumTitle(String sumTitle) {
		this.sumTitle = sumTitle;
	}

	public Map<String, String> getItemMap() {
		return itemMap;
	}

	public void setItemMap(Map<String, String> itemMap) {
		this.itemMap = itemMap;
	}

	public List<String> getItemList() {
		return itemList;
	}

	public void setItemList(List<String> itemList) {
		this.itemList = itemList;
	}

	public String getItem() {
		return item;
	}

	public void setItem(String item) {
		this.item = item;
	}

	public String getMethod() {
		return method;
	}

	public void setMethod(String method) {
		this.method = method;
	}

	public String getItemAuto() {
		return itemAuto;
	}

	public void setItemAuto(String itemAuto) {
		this.itemAuto = itemAuto;
	}
 
	public String getStartTime() {
		return startTime;
	}

	public void setStartTime(String startTime) {
		this.startTime = startTime;
	}

	public String getEndTime() {
		return endTime;
	}

	public void setEndTime(String endTime) {
		this.endTime = endTime;
	}
	
	
}
